home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 3 / Amiga Tools 3.iso / rexx / bmcfuncs.raz < prev    next >
Encoding:
Text File  |  1994-12-30  |  2.9 KB  |  80 lines

  1. /** $VER: BMCFuncs.raz 1.2 (30.12.94)
  2.  **
  3.  ** Ajoute une marque pour chaque nom de fonction dans un
  4.  ** source en langage C, puis ouvre la palette flottante
  5.  ** des marques.
  6.  ** Ne sont pris que les noms qui précèdent une "(" et qui
  7.  ** sont suivis d'une "{".
  8.  **
  9.  ** Comme ce script doit rester le plus rapide possible il
  10.  ** n'est pas question d'en faire un interpréteur de
  11.  ** langage C. En particulier il n'aime pas les (){} qui sont
  12.  ** à l'intérieur de commentaires.
  13.  **/
  14.  
  15. OPTIONS RESULTS
  16.  
  17. /*------- Sauvegarde la position de départ --------*/
  18.  
  19. ReqClose Bookmarks      /* ferme la palette des marques */
  20.  
  21. Lock INPUT DISPLAY STATUS ON
  22. GetPos; PARSE VAR RESULT startline startcol .
  23. Cursor 1 1
  24.  
  25. /*------- Parcoure les lignes du texte --------*/
  26.  
  27. oldline = 0
  28. oldcol = 0
  29.  
  30. DO FOREVER
  31.     Search RESET FROMCURS "{"; IF (RC >= 5) THEN LEAVE
  32.     GetPos; PARSE VAR RESULT acline accol .
  33.  
  34.     Search RESET FROMCURS ")" BACK;
  35.     GetPos; PARSE VAR RESULT endparline endparcol .
  36.     IF (RC = 0) THEN DO
  37.         Match "(" ")"; IF (RC >= 5) THEN LEAVE
  38.         GetPos; PARSE VAR RESULT parline parcol .
  39.         IF ((parline > oldline) | (parline = oldline & parcol > oldcol)) THEN DO
  40.             GetWord parline parcol PREV MOVECURS; word = STRIP(RESULT)
  41.             IF LENGTH(word) ~= 0 THEN DO
  42.                 Cursor ENDWORD; PARSE VAR RESULT wordline wordcol .
  43.                 GetText wordline wordcol parline parcol; string = RESULT; len = LENGTH(string)
  44.                 ok = 1
  45.                 DO i=1 TO len-1
  46.                     ch = SUBSTR( string, i, 1 )
  47.                     IF ((ch ~= '20'x) & (ch ~= '09'x) & (ch ~= '0A'x)) THEN DO; ok = 0; LEAVE; END
  48.                 END
  49.                 IF ok == 1 THEN DO
  50.                     GetText endparline endparcol acline accol; string = RESULT; len = LENGTH(string)
  51.                     DO i=2 TO len-1
  52.                         ch = SUBSTR( string, i, 1 )
  53.                         IF ((ch ~= '20'x) & (ch ~= '09'x) & (ch ~= '0A'x)) THEN DO
  54.                             IF (ch == ';') THEN ok = 0 /* si ';' fortes chances que c'est une définition de prototype */
  55.                             LEAVE  /* sinon c'est peut-être une déclaration vieux style des paramètres */
  56.                         END
  57.                     END
  58.                     IF ok == 1 THEN DO
  59.                         GetLine 'LINE' parline; string = STRIP(RESULT)
  60.                         IF (LEFT(string,7) ~= "#define") THEN BMAdd word  /* sinon c'est une macro */
  61.                     END
  62.                 END
  63.             END
  64.         END
  65.     END
  66.     Cursor acline accol /* remet pour le Match qui suit */
  67.  
  68.     Match "{" "}"; IF (RC >= 5) THEN LEAVE /* et hop! saute tout le corps de la fonction */
  69.     GetPos; PARSE VAR RESULT oldline oldcol .
  70. END
  71.  
  72. /*------- Restore la position de départ --------*/
  73.  
  74. Cursor startline startcol
  75. Lock INPUT DISPLAY STATUS OFF
  76.  
  77. /*------- Ouvre la sélection flottante --------*/
  78.  
  79. ReqOpen Bookmarks
  80.